package com.york.utils.config;

import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Copyright(C),2021,伯海晟科技有限公司
 * FileName:Swagger2Config
 * Author:yangboxiong
 * Date:2021/6/7 0:02
 * Description:
 * History:
 * <author>       <time>      <version>       <desc>
 * 作者姓名       修改时间        版本号         描述
 *
 * @author yangboxiong
 */
@Configuration
@EnableSwagger2     //启用Swagger2.createRestApi函数创建Docker的Bean
public class Swagger2Config {
    /**
     * 创建API应用
     * apilnfo()增加API相关信息
     * 通过select()函数返回一个ApiSelectBuilder实例，用来控制哪些接口暴露个Swagger来展现
     */
    @Bean
    public Docket AdminRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                //返回一个ApiSelectorBuilder实例，用来控制哪些接口暴露给Swagger来展示。
                .select()
                .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                .build()
                //用来展示该API的基本信息
                .apiInfo(adminApiInfo());
    }

    @Bean
    public Docket WebRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .select().paths(Predicates.and(PathSelectors.regex("/api/.*")))
                .build()
                .apiInfo(webApiInfo());
    }

    /**
     * 创建该API的基本信息（这些基本信息会展现在文档页面中）
     */
    private ApiInfo adminApiInfo() {
        return new ApiInfoBuilder()
                .title("后台管理系统API文档")
                .description("本文档描述了后台管理系统的各个模块的接口调用方式")
                .termsOfServiceUrl("http://121.4.17.158:8080/")
                .contact(new Contact("个人", "http://121.4.17.158:10636/york/admin", "1123516869@qq.com"))
                .version("1.6")
                .build();
    }

    /**
     * 创建该API的基本信息（这些基本信息会展现在文档页面中）
     */
    private ApiInfo webApiInfo() {
        return new ApiInfoBuilder()
                .title("网站API文档")
                .description("本文档描述了后台管理系统的各个模块的接口调用方式")
                .termsOfServiceUrl("http://121.4.17.158:8080/")
                .contact(new Contact("个人", "http://121.4.17.158:10636/york/admin", "1123516869@qq.com"))
                .version("1.6")
                .build();
    }
}
